package br.unifor.ads.pjappfinanceiro.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.pjappfinanceiro.entity.ContaReceber;

public class ContaReceberDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {
			ClientesDAO clienteDAO = new ClientesDAO();

			ContaReceber contaReceber = new ContaReceber();
			contaReceber.setId(resultSet.getInt("id_receber"));
			contaReceber.setClientes(clienteDAO.buscarPorId(resultSet
					.getInt("id_cliente")));
			contaReceber.setDtReceber(resultSet.getDate("data_receber"));
			contaReceber.setDocumento(resultSet.getString("doc_receber"));
			contaReceber.setReferente(resultSet.getString("referente_receber"));
			contaReceber.setValor(resultSet.getDouble("valor_receber"));
			contaReceber.setStatus(resultSet.getString("status_receber"));

			return contaReceber;
		}
	};

	public void salvar(ContaReceber contaReceber) throws SQLException {

		String sql = "insert into tb_contareceber(id_cliente, data_receber, "
				+ "doc_receber, referente_receber, valor_receber, status_receber) values (?, ?, ?, ?, ?, ?)";
		em.executeQuery(sql, contaReceber.getClientes().getId(),
				contaReceber.getDtReceber(), contaReceber.getDocumento(),
				contaReceber.getReferente(), contaReceber.getValor(),
				contaReceber.getStatus());
	}

	public void atualizar(ContaReceber contaReceber) throws SQLException {

		String sql = "update tb_contareceber set id_cliente = ?, data_receber = ?, "
				+ "doc_receber = ?, referente_receber = ?, valor_receber = ?, "
				+ "status_receber = ? where id_receber = ?  ";
		em.executeQuery(sql, contaReceber.getClientes().getId(),
				contaReceber.getDtReceber(), contaReceber.getDocumento(),
				contaReceber.getReferente(), contaReceber.getValor(),
				contaReceber.getStatus(), contaReceber.getId());

	}

	public void excluirPorId(Integer id) throws SQLException {
		String sql = "delete from tb_contareceber where id_receber = ?";
		em.executeQuery(sql, id);
	}

	public void excluirTodos() throws SQLException {

		String sql = "delete from tb_contareceber";
		em.executeQuery(sql);
	}

	public ContaReceber buscarPorId(Integer id) throws SQLException {

		String sql = "select id_cliente, data_receber, "
				+ "doc_receber, referente_receber, valor_receber, "
				+ "status_receber "
				+ "from tb_contareceber where id_receber = ?";
		return (ContaReceber) em.getSingleResult(sql, id);
	}

	@SuppressWarnings("unchecked")
	public List<ContaReceber> buscarTodos() throws SQLException {
		String sql = "select id_cliente, data_receber, "
				+ "doc_receber, referente_receber, valor_receber, "
				+ "status_receber from tb_contareceber";
		return (List<ContaReceber>) em.getResultList(sql);
	}

}
